{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 15\n",
    "\n",
    "# 左右极限\n",
    "Book_3《数学要素》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9992d682-f5a5-43ea-b612-023b8106a840",
   "metadata": {},
   "source": [
    "这段代码的目标是分析函数 \n",
    "\n",
    "$$\n",
    "f(x) = \\frac{1}{1 + 2^{-1/x}}\n",
    "$$\n",
    "\n",
    "在 $x$ 接近 $0$ 时的左右极限。函数 $f(x)$ 具有分段的逼近行为：当 $x \\to 0^+$ 时，$f(x)$ 接近一个值，而当 $x \\to 0^-$ 时，$f(x)$ 会趋向另一个值。因此，该代码通过计算左右极限并绘制函数曲线来可视化这种行为。\n",
    "\n",
    "具体步骤如下：\n",
    "\n",
    "1. **定义函数**：代码通过 $f(x) = \\frac{1}{1 + 2^{-1/x}}$ 来建立一个具有不同左右极限的函数。该表达式依赖于 $x$ 的正负值：当 $x$ 为正且接近 $0$ 时，$2^{-1/x}$ 接近 $0$，使得 $f(x) \\approx 1$；当 $x$ 为负且接近 $0$ 时，$2^{-1/x}$ 迅速趋向无穷大，导致 $f(x) \\approx 0$。\n",
    "\n",
    "2. **计算左右极限**：代码使用`SymPy`的`limit`函数计算当 $x \\to 0^+$ 和 $x \\to 0^-$ 时的左右极限，即：\n",
    "\n",
    "   $$\n",
    "   \\lim_{x \\to 0^+} f(x) = 1, \\quad \\lim_{x \\to 0^-} f(x) = 0\n",
    "   $$\n",
    "\n",
    "   通过这些极限值，可以看到 $f(x)$ 在 $x=0$ 处的非连续性。\n",
    "\n",
    "3. **绘制函数曲线和极限值**：使用`Matplotlib`，代码绘制了 $f(x)$ 在 $x$ 接近 $0$ 两侧的曲线图。右侧部分的 $x$ 值从 $0.01$ 到 $4$，左侧部分的 $x$ 值从 $-4$ 到 $-0.01$。在图中，函数值曲线以蓝色绘制，左右极限值以红色水平线表示。图中还添加了黑色的垂直线 $x = 0$ 和水平线 $y = 0.5$ 作为参考。\n",
    "\n",
    "此图形清晰地展示了 $f(x)$ 在 $x=0$ 处的左右极限不同的特性，帮助理解该函数的非连续性和分段逼近行为。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "54c26924-a052-439f-97da-bfb5fa5fb88c",
   "metadata": {},
   "source": [
    "## 导入包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9a395c6d-bbbe-4020-b5e2-113a76b198b5",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy import latex, lambdify, limit, log, oo  # 导入符号计算库SymPy中的latex格式化、数值化、极限、对数和无穷大符号\n",
    "from sympy.abc import x  # 导入符号变量x\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt  # 导入NumPy和Matplotlib用于数值计算和绘图"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c36719ad-dfa7-4fea-a294-f16542783d03",
   "metadata": {},
   "source": [
    "## 定义分段函数 f(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f6663505-1ad3-41bd-9fc2-ecd8c8576689",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{1}{1 + 2^{- \\frac{1}{x}}}$"
      ],
      "text/plain": [
       "1/(1 + 2**(-1/x))"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f_x = 1 / (1 + 2**(-1/x))  # 定义函数表达式\n",
    "f_x"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d367723-d0bf-4fe8-a9b7-7060c9f6a933",
   "metadata": {},
   "source": [
    "## 将符号表达式转换为数值函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c4c7786d-d2f8-4ff5-93ee-5785702fba5d",
   "metadata": {},
   "outputs": [],
   "source": [
    "f_x_fcn = lambdify(x, f_x)  # 将f(x)转换为Python数值函数"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7887ebde-cb8e-4fa5-8937-077663b53801",
   "metadata": {},
   "source": [
    "## 计算右极限"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "3eace351-7a73-4d5b-9fc6-2c2c86d24519",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 1$"
      ],
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_array_right = np.linspace(0.01, 4, 500)  # x从右侧逼近0的范围\n",
    "f_x_array_right = f_x_fcn(x_array_right)  # 计算右侧逼近0时的f(x)值\n",
    "f_x_0_limit_right = limit(f_x, x, 0, '+')  # 计算x趋于0的右极限\n",
    "f_x_0_limit_right"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "717d1a2c-d796-407c-91db-eac97f498159",
   "metadata": {},
   "source": [
    "## 计算左极限"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "cf607915-8486-44cb-8f1a-8f1cbf6edc2f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_array_left = np.linspace(-4, -0.01, 500)  # x从左侧逼近0的范围\n",
    "f_x_array_left = f_x_fcn(x_array_left)  # 计算左侧逼近0时的f(x)值\n",
    "f_x_0_limit_left = limit(f_x, x, 0, '-')  # 计算x趋于0的左极限\n",
    "f_x_0_limit_left"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23d75ae1-f249-467a-aef9-ac5bf56b9f20",
   "metadata": {},
   "source": [
    "## 绘制函数和极限值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "bea96b1b-b952-404c-9604-1eba73515577",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, '$\\\\frac{1}{1 + 2^{- \\\\frac{1}{x}}}$')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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Zo9R2/Kb3/wGX375JRYsWGB2KYY49dRTsWHDBnzyySf41a9+hcmTJ+Prr782uyxd7dy5E7fccguef/55uN3uhH4GL0vSyP79+7F///64z+nVqxeuvfZavP32203eRMPhMBwOB37605/iX//6l96lJlVLc8dayXbt2oXc3FysXr3acptuW5u7tLQUo0aNwrBhw/DMM8/AbrfmZ4xExvuZZ57BtGnTcPjwYZ2rM1YwGITX68Urr7yCyy+/vP7xW265BRs2bMDy5ctNrM4YNpsNb7zxBsaPH292KYa56aab8Oabb2LFihXIz883uxxTnH/++ejduzeeeOIJs0vRzZtvvonLL78cDoej/rFwOAybzQa73Y5AINDke7Gk6V2klXTq1AmdOnU67vP+/ve/47777qv/d2lpKS688EIsXLgQw4YN07NEXbQ0dyzRHjsQCCSzJEO0Jvfu3bsxatQoFBQU4Omnn7ZsgwRoG++2Jj09HQUFBSguLm7SJBUXF+Oyyy4zsTLSQyQSwU033YQ33ngDy5YtE9sgAep3YcX37dY477zz8NVXXzV57Oc//zl+8IMf4I477jhugwSwSUpIz549m/w7MzMTANC7d2/06NHDjJIM8dlnn+Gzzz7D2WefjRNOOAHbtm3DXXfdhd69e1tuK1JrlJaWYuTIkejZsycefvhh7Nu3r/57J554oomV6a+kpAQHDx5ESUkJwuFw/Vxgffr0qV/vrW769OmYOHEihg4disLCQsybNw8lJSVt+pizqqoqfPfdd/X/3r59OzZs2IAOHTo0e39rS2688Ua8+OKLWLRoEdq1a1d/3Fl2djY8Ho/J1ennzjvvxNixY5Gbm4sjR47gpZdewrJly7BkyRKzS9NVu3btmh1vFj2etsXHoSX9XDuBtm/fLmIKgC+//DIyatSoSIcOHSIulyvSq1evyNSpUyO7du0yuzRdPf300xEAMW9t3eTJk2Pm/vDDD80uLakef/zxSF5eXiQ9PT0yZMiQNn9K+IcffhhzXCdPnmx2abo61t/x008/bXZpuvrFL35Rv3537tw5ct5550WWLl1qdlmmaO0UADwmiYiIiCgG6x5YQURERKQjNklEREREMbBJIiIiIoqBTRIRERFRDGySiIiIiGJgk0REREQUA5skIiIiohjYJBERERHFwCaJiIiIKAY2SUREREQxsEkiIiIiioFNEhGJtWDBArjdbuzevbv+seuvvx4DBgxARUWFiZURUSrgBW6JSKxIJIJBgwZhxIgReOyxx3DPPffgySefxCeffILu3bubXR4RmSzN7AKIiMxis9lw//3346qrrkK3bt3w6KOPYuXKlWyQiAgAtyQREWHIkCHYuHEjli5dinPPPdfscogoRfCYJCIS7b333sPmzZsRDoeRk5NjdjlElEK4JYmIxFq3bh1GjhyJxx9/HC+99BK8Xi9eeeUVs8siohTBY5KISKQdO3bgkksuwYwZMzBx4kT069cPp59+OtauXYuCggKzyyOiFMAtSUQkzsGDB3HWWWfhnHPOwRNPPFH/+GWXXYZAIIAlS5aYWB0RpQo2SUREREQx8MBtIiIiohjYJBERERHFwCaJiIiIKAY2SUREREQxsEkiIiIiioFNEhEREVEMbJKIiIiIYmCTRERERBQDmyQiIiKiGNgkEREREcXAJomIiIgohv8PZ5Vhp4/8ebUAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()  # 创建绘图窗口\n",
    "\n",
    "ax.plot(x_array_right, f_x_array_right, linewidth=1.5, color='b')  # 绘制右侧f(x)曲线\n",
    "ax.axhline(y=f_x_0_limit_right, color='r')  # 添加水平线表示右极限值\n",
    "\n",
    "ax.plot(x_array_left, f_x_array_left, linewidth=1.5, color='b')  # 绘制左侧f(x)曲线\n",
    "ax.axhline(y=f_x_0_limit_left, color='r')  # 添加水平线表示左极限值\n",
    "\n",
    "ax.axvline(x=0, color='k')  # 添加垂直线表示x=0\n",
    "ax.axhline(y=0.5, color='k')  # 添加水平线表示y=0.5\n",
    "\n",
    "ax.grid(linestyle='--', linewidth=0.25, color=[0.5, 0.5, 0.5])  # 添加网格线\n",
    "ax.set_xlim(x_array_left.min(), x_array_right.max())  # 设置x轴范围\n",
    "\n",
    "ax.set_xlabel(r'$\\it{x}$', fontname='Times New Roman')  # 设置x轴标签\n",
    "ax.set_ylabel(r'$%s$' % latex(f_x), fontname='Times New Roman')  # 使用LaTeX格式化y轴标签为f(x)的表达式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ecd322f4-f919-4be2-adc3-69d28ef25e69",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
